package gob.cgr.web.sgrh.managed;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

import org.primefaces.event.RowEditEvent;

import gob.cgr.sgrh.ejb.entidad.CumplimientoDocumentacion;
import gob.cgr.sgrh.ejb.entidad.Documento;
import gob.cgr.sgrh.ejb.entidad.Legajo;
import gob.cgr.sgrh.ejb.entidad.Personal;
import gob.cgr.web.sgrh.service.SigerhService;
import gob.cgr.web.sgrh.util.Utilitario;

@ManagedBean
@ViewScoped
public class CumplimientoMB {

	private Personal personalSelected;
	private List<Documento> documentosObligatorios;
	private List<CumplimientoDocumentacion> cumplimientos;
	private boolean ok;
	private double porcentaje=1.0;
	//private List
	@Inject
	SigerhService service;
	public CumplimientoMB() {
		// TODO Auto-generated constructor stub
		
	}
	
	public void cargarCumplimiento(){
		cumplimientos=service.listarCumplimiento(personalSelected.getIdPersona());
		documentosObligatorios=service.listarDocumentosObligatorios();
		List<CumplimientoDocumentacion> faltantes=new ArrayList<CumplimientoDocumentacion>();
		System.out.println("iterando por documentos obligatorios");
		for(Documento doc:documentosObligatorios){
			System.out.println("doc: "+doc.getDescripcion());
			boolean presentado=false;
			for(CumplimientoDocumentacion c:cumplimientos){
				if(doc.getIdDocumento()==c.getIdDocumento().getIdDocumento()){
					presentado=true;
					break;
				}
				
			}
			if(presentado==false){
			CumplimientoDocumentacion cmp=new CumplimientoDocumentacion();
			cmp.setIdDocumento(doc);
			cmp.setIdPersonal(personalSelected);
			faltantes.add(cmp);
			}
			
			
		}
		
		if(faltantes.size()>0){
			setPorcentaje(cumplimientos.size()==0?0.0:(Double.valueOf(documentosObligatorios.size()+"")/Double.valueOf(cumplimientos.size()+"")));
			cumplimientos.addAll(cumplimientos.size(),faltantes);
			
			ok=false;
		}else{
			ok=true;
			
		}
		
	}

	public Personal getPersonalSelected() {
		return personalSelected;
	}

	public void setPersonalSelected(Personal personalSelected) {
		this.personalSelected = personalSelected;
	}

	public List<Documento> getDocumentosObligatorios() {
		return documentosObligatorios;
	}

	public void setDocumentosObligatorios(List<Documento> documentosObligatorios) {
		this.documentosObligatorios = documentosObligatorios;
	}

	public List<CumplimientoDocumentacion> getCumplimientos() {
		return cumplimientos;
	}

	public void setCumplimientos(List<CumplimientoDocumentacion> cumplimientos) {
		this.cumplimientos = cumplimientos;
	}

	public boolean isOk() {
		return ok;
	}

	public void setOk(boolean ok) {
		this.ok = ok;
	}
	
	public void actualizarDocumentacion(){
		System.out.println("llamdo a verificar");
		/*for(CumplimientoDocumentacion d:cumplimientos){
			
			System.out.println("iterando doc "+d.getIdCumplimientoDoc()+" verificado "+d.getOk());
		}*/
		try {
			service.actualizarCumplimientoDocumentacion(cumplimientos);
			Utilitario.mostrarMensajeExito("se ha actualizado la operacion correctamente");
			cargarCumplimiento();
		} catch (Exception e) {
			// TODO: handle exception
			Utilitario.mostrarMensajeAlerta("Ocurrio un error al actualizar el cumplimiento");
		}
		
		
	}

	public double getPorcentaje() {
		return porcentaje;
	}

	public void setPorcentaje(double porcentaje) {
		this.porcentaje = porcentaje;
	}
	
	
	
	
	public void rowEditListener(RowEditEvent event){ 
		
		CumplimientoDocumentacion c=(CumplimientoDocumentacion) event.getObject();
	//	System.out.println("cumplimiento obtenido :::"+c +" verificado "+c.getVerificado());
		try {
			c.setFechaPresentacion(c.getOk()?new Date():null);
			service.actualizarCumplimientoDocumentacion(c);
		//System.out.println("cumplimiento fecha "+c.getFechaPresentacion());
			Utilitario.mostrarMensajeExito("se ha actualizado la operacion correctamente");
		} catch (Exception e) {
			// TODO: handle exception
			Utilitario.mostrarMensajeAlerta("Ocurrio un error al actualizar el cumplimiento "+e.getMessage());
		}
		
		
	}
	
}
